class Pulve < Charge
  
  has_many :putofactures, :single_save => true, :dependent => :destroy
  has_many :factures, :through => :putofactures

  has_many :putoparcelles, :single_save => true, :dependent => :destroy
  has_many :parcelles, :through => :putoparcelles

  belongs_to :category
  belongs_to :user
  
  validates_presence_of :name
  validates_presence_of :category
  validates_presence_of :user
  validates_associated :putoparcelles
  validates_associated :putofactures

# METHODES
  
  def get_cout_ha_produit
    return(self.dosage * self.prix_littre)
  end
  
  def get_cout_ha_passage
    self.cout_ha_passage
  end

  # retourne le cout a l'ha
  def get_cout_ha
    return (self.cout_ha_passage + self.get_cout_ha_produit)
  end
  
  # retourne le cout total de cette charge
  def get_cout_total
    return (self.sum_surfaces * self.get_cout_ha)
  end

  # retourne le cout ha par parcelle
  # cette m�thode sera diff�renci�e de get_cout_ha lorsque les indices 
  # de chaque parcelle seront introduits  
  def get_cout_ha_parcelle(parcelle)
    cout_ha_parcelle = 0
    if (all_parcelles? || self.parcelles.include?(parcelle))
      cout_ha_parcelle = self.get_cout_ha
    end
    return cout_ha_parcelle
  end

  def get_cout_ha_zone(zone)
    cout_ha_zone = 0
    if (all_parcelles? || self.include_zone?(zone))
      cout_ha_zone = self.get_cout_ha
    end
    return cout_ha_zone
  end
  
  
  def get_cout_ha_parcelle_with_rate(parcelle)
    cout_ha_parcelle = 0
    if all_parcelles? 
      cout_ha_parcelle = self.get_cout_ha
    end
    if (self.parcelles.include?(parcelle))
    rate = Putoparcelle.find_by_parcelle(parcelle.id, self.id).rate
      cout_ha_parcelle = self.get_cout_ha * rate
    end
    return cout_ha_parcelle
  end
  
  

#debut Putoparcelle
  def new_putoparcelle_attributes=(putoparcelle_attributes)
    putoparcelle_attributes.each do |attributes|
      putoparcelles.build(attributes)
    end
  end
 
  def existing_putoparcelle_attributes=(putoparcelle_attributes)
    putoparcelles.reject(&:new_record?).each do |putoparcelle|
      attributes = putoparcelle_attributes[putoparcelle.id.to_s]
      if attributes
        putoparcelle.attributes = attributes
      else
#        putoparcelle.delete(putoparcelle)
        sql = "DELETE FROM putoparcelles WHERE id = #{putoparcelle.id} LIMIT 1"
        ActiveRecord::Base.connection.execute(sql)
      end
    end
  end
 
  def save_putoparcelles
    putoparcelles.each do |putoparcelle|
      putoparcelle.save(false)
    end
  end
#fin Putoparcelle  
  def new_putofacture_attributes=(putofacture_attributes)
    putofacture_attributes.each do |attributes|
      putofactures.build(attributes)
    end
  end
 
  def existing_putofacture_attributes=(putofacture_attributes)
    putofactures.reject(&:new_record?).each do |putofacture|
      attributes = putofacture_attributes[putofacture.id.to_s]
      if attributes
        putofacture.attributes = attributes
      else
#        putofacture.delete(putofacture)
        sql = "DELETE FROM putofactures WHERE id = #{putofacture.id} LIMIT 1"
        ActiveRecord::Base.connection.execute(sql)
      end
    end
  end
 
  def save_putofactures
    putofactures.each do |putofacture|
      putofacture.save(false)
    end
  end

end